#ifndef SHEPJSON_H__
#define SHEPJSON_H__

using shep_type = enum {SHEP_NULL, SHEP_FALSE, SHEP_TRUE, SHEP_NUMBER, SHEP_STRING, SHEP_ARRAY, SHEP_OBJECT};

class shep_value{
private:
    double n;
    shep_type type;
public:
    //shep_value(shep_type data = SHEP_NULL):type(data){}

    void set_type(const shep_type& data){this->type = data;}
    
    void set_number(const double& num){this->n = num;}
    
    shep_type get_type(){return this->type;};

    double get_number(){
        //assert(this->type == SHEP_NUMBER);
        return this->n;
    }
};

enum{//解析结果
    SHEP_PARSE_OK = 0,           //解析成功
    SHEP_PARSE_EXCEPT_VALUE,     //字符串只含有空白
    SHEP_PARSE_INVALID_VALUE,    //字符串不正确
    SHEP_PARSE_ROOT_NOT_SINGULAR,//字符串在最后的空白后还有其他字符
    SHEP_PARSE_NUMBER_TOO_BIG    //解析的数字过大
};

int shep_parse(shep_value& v, const char* json);

//shep_type shep_get_type(const shep_value* v);

#endif // SHEPJSON_H__